<!--
 * @Author: WangGuojian 1085844536@qq.com
 * @Date: 2023-08-05 16:29:55
 * @LastEditTime: 2023-08-05 18:07:15
 * @LastEditors: WangGuojian 1085844536@qq.com
 * @FilePath: \vue-basic\09-监视属性\5.姓名案例_watch实现.html
 * @Description:
-->
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>姓名案例_watch实现</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <!--
            computed和watch之间的区别:
                1.computed能完成的功能,watch都可以完成
                2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作
            两个重要原则:
                1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm或组件实例对象
                2.所有不被Vue管理的函数(定时器的回调函数,ajax的回调函数等,Promise的回调函数),最好携程箭头函数,
                    这样this的指向才是vm或组件实例对象
         -->
        <!-- 准备一个容器 -->
        <div id="root">
            姓: <input type="text" v-model="firstName" /><br /><br />
            名: <input type="text" v-model="lastName" /><br /><br />
            全名: <span>{{fullName}}</span><br /><br />
        </div>
    </body>
    <script type="text/javascript">
        Vue.config.productionTip = false;

        const vm = new Vue({
            el: '#root',
            data: {
                firstName: '张',
                lastName: '三',
                fullName: '张-三',
            },
            watch: {
                firstName(val) {
                    setTimeout(() => {
                        this.fullName = val + '-' + this.lastName;
                    }, 1000);
                },
                lastName(val) {
                    this.fullName = this.firstName + '-' + val;
                },
            },
        });
    </script>
</html>
